package com.example.code2022;

import com.alibaba.fastjson.JSON;

import java.util.Arrays;

/**
 * @author: dangwen
 * @createDate: 2022/4/24
 * 179. 最大数
 * 给定一组非负整数 nums，重新排列每个数的顺序（每个数不可拆分）使之组成一个最大的整数。
 * 注意：输出结果可能非常大，所以你需要返回一个字符串而不是整数。
 */
public class P179 {
    public static void main(String[] args) {
        int[] nums = {3,30,34,5,9};
        System.out.println(maxValue(nums));

    }
    public static String maxValue(int[] nums){
        // arrays.sort比较需要是引用类型，所以这里需要copy一次数组
        Integer[] arr = new Integer[nums.length];
        for (int i = 0; i < nums.length; i++){
            arr[i] = nums[i];
        }
        // 排序，comparator默认是升序，而我们希望是降序
        Arrays.sort(arr,(a,b)->{
            String x = String.valueOf(a);
            String y = String.valueOf(b);
            return (y + x).compareTo(x + y);
//            return b.compareTo(a); // 默认：a->b升序
        });
        // 如果排完序第一个是0，说明数组全为0，那最大数就是0
        if (arr[0] == 0){
            return "0";
        }
        // 返回一个字符串即可
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < arr.length; i++){
            sb.append(arr[i]);
        }
        return sb.toString();
    }
}
